package client.gui;

import javax.swing.table.AbstractTableModel;

/**
 * model definissant la JTable pour afficher la liste des tables disponibles
 */
@SuppressWarnings("serial")
public class ModelTable extends AbstractTableModel {
	/**
	 * les colonnes du tableau
	 */
	String[] columnNames = { "Table", "Encheres", "Assis" };
	/**
	 * les informations du tableau
	 */
	Object[][] table = { {} };
	/**
	 * le type des differentes colonnes du tableau
	 */
	@SuppressWarnings("unchecked")
	Class columnType[] = { String.class, String.class, String.class };

	/**
	 * vide le tableau
	 */
	public void resetTable() {
		Object[][] tmp = { {} };
		table = tmp;
	}

	/**
	 * permet d'ajouter une ligne au tableau
	 * 
	 * @param arg
	 *            est la ligne a ajouter
	 */
	public void ajoutLigne(String[] arg) {
		if (arg.length == columnNames.length) {
			Object[][] tmp;
			if (table[0].length != columnNames.length) {
				tmp = new Object[1][columnNames.length];
			} else {
				tmp = new Object[table.length + 1][columnNames.length];
			}
			for (int i = 0; i < table.length; i++) {
				for (int j = 0; j < table[i].length; j++) {
					tmp[i][j] = table[i][j];
				}
			}
			for (int i = 0; i < columnNames.length; i++) {
				tmp[tmp.length - 1][i] = arg[i];
			}
			table = tmp;
		}

		fireTableDataChanged();
	}

	/**
	 * permet de savoir combien il y a de lignes dans le tableau
	 * 
	 * @return le nombre de lignes
	 */
	public int getColumnCount() {
		return table[0].length;
	}

	/**
	 * permet de savoir combien il y a de colonnes dans le tableau
	 * 
	 * @return le nombre de colonnes
	 */
	public int getRowCount() {
		return table.length;
	}

	/**
	 * permet d'acceder a un element dans une ligne et une colonne
	 * 
	 * @param r
	 *            est la ligne
	 * @param c
	 *            est la colonne
	 * @return l'element trouve
	 */
	public Object getValueAt(int r, int c) {
		return table[r][c];
	}

	/**
	 * permet d'avoir le nom de la colonne
	 * 
	 * @param column
	 *            est le numero de la colonne
	 * @return est le nom de la colonne
	 */
	public String getColumnName(int column) {
		return columnNames[column];
	}

	/**
	 * permet d'avoir le type d'elements qu'il y a dans une colonne
	 * 
	 * @param c
	 *            est le numero de la colonne
	 * @return est le type de la colonne
	 */
	@SuppressWarnings("unchecked")
	public Class getColumnClass(int c) {
		return columnType[c];
	}

	/**
	 * permet de savoir si la case du tableau est editable
	 * 
	 * @param r
	 *            est la ligne
	 * @param c
	 *            est la colonne
	 * @return toujours false car l'on ne veut pas qe le tableau soit editable
	 */
	public boolean isCellEditable(int r, int c) {
		return false;
	}

	/**
	 * permet de mettre une valeur dans une case du tableau
	 * 
	 * @param aValue
	 *            est la nouvelle valeur
	 * @param r
	 *            est la ligne
	 * @param c
	 *            est la colonne
	 */
	public void setValueAt(Object aValue, int r, int c) {
	}

}
